"""
Модуль для анализа и визуализации данных кластеров и маршрутов связи между ними 
при использовании фильтрации количества каналов

- Получает конфигурацию из файла config.yaml
- Кластеризует объекты методом K-Means согласно конфигурации
- Добавляет фильтры количество коммуникаций
- Генерирует граф сети на основе информации об объектах и кластерах.
- Фильтрует количество каналов
- Визуализирует результаты на 3D-графике
- Вывод статистической информации в терминал

Импорт необходимых модулей:
"""
from swarm_network import charts
from swarm_network import clusters
from swarm_network import data
from swarm_network import graph

# Чтение конфигурации и установка параметров генерации
config = data.read_config('config.yaml')
data_directory = config['data_directory']
base_point = config['base_point']
data_filename = config['data_filename']

# Ручное конфигурирование
count_clusters = 10
# data_filename = "data-grid-100-side100000-z1000"
base_connections = 3
leaders_connections = 3
show_objects = True
line_size= 1.5

# Получение объектов из файла
df_objects = data.get_data(data_directory, data_filename)

# Кластеризация
df_objects, df_clusters = clusters.clustering(df_objects, count_clusters, base_point)

df_objects, df_clusters = clusters.set_base_connectors(df_objects, df_clusters, base_connections)

# Создание графа
Graph = graph.generate_graph(df_objects, df_clusters, base_point)

# Фильтрация графа
filtered_G = graph.filter_connections(Graph, base_connections, leaders_connections)

# Визуализация графа
charts.print_graph_connections(filtered_G, "Визуализация машртутов связи между кластерами", show_objects=show_objects, line_size=line_size)

# Статистические данные
graph.print_stat(filtered_G)
